// -----------------------------------------------------------------------------
// Pre-decrypted ROMsets



// Garou (Non-encrypted P-ROMs, decrypted C-ROMs)

static struct BurnRomInfo garounRomDesc[] = {
	{"253-sma.bin"  , 0x040000, 0x98bc93dc, 0x10}, //  0 68K code
	{"253-ep1.p1"   , 0x200000, 0xea3171a4, 0x10}, //  1
	{"253-ep2.p2"   , 0x200000, 0x382f704b, 0x10}, //  2
	{"253-ep3.p3"   , 0x200000, 0xe395bfdd, 0x10}, //  3
	{"253-ep4.p4"   , 0x200000, 0xda92c08e, 0x10}, //  4

	{"motwn_c1.bin" , 0x800000, 0x497be3f2,    1}, //  5 Sprite data
	{"motwn_c2.bin" , 0x800000, 0x6a9e95ca,    1}, //  6
	{"motwn_c3.bin" , 0x800000, 0x39373d2f,    1}, //  7
	{"motwn_c4.bin" , 0x800000, 0x4de23f6c,    1}, //  8
	{"motwn_c5.bin" , 0x800000, 0x16634ba5,    1}, //  9
	{"motwn_c6.bin" , 0x800000, 0x95671ffd,    1}, // 10
	{"motwn_c7.bin" , 0x800000, 0xe36ce77f,    1}, // 11
	{"motwn_c8.bin" , 0x800000, 0xddbd1096,    1}, // 12

	{"253-m1.bin"   , 0x040000, 0x36a806be, 0x10}, // 13 Z80 code

	{"253-v1.bin"   , 0x400000, 0x263e388c,    2}, // 14 Sound data
	{"253-v2.bin"   , 0x400000, 0x2c6bc7be,    2}, // 15
	{"253-v3.bin"   , 0x400000, 0x0425b27d,    2}, // 16
	{"253-v4.bin"   , 0x400000, 0xa54be8a9,    2}, // 17
};

STDROMPICKEXT(garoun, garoun, neogeo);
STD_ROM_FN(garoun);

struct BurnDriver BurnDrvGaroun = {
	{"garoun", "Garou: Mark Of The Wolves", "Non-encrypted P-ROMs, decrypted C-ROMs", "SNK", "Neo Geo", "1999", "garou", "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_SRAM | HARDWARE_SNK_SMA_PROTECTION,
	NULL, garounRomInfo, garounRomName, neogeoInputInfo, neogeoDIPInfo,
	garouInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};


// Prehistoric Isle 2 (Non-encrypted P-ROMs, decrypted C-ROMs)

static struct BurnRomInfo preisl2nRomDesc[] = {
	{"255-p1.bin", 0x100000, 0xDFA3C0F3, 0x10}, //  0 68K code
	{"255-p2.bin", 0x400000, 0x42050B80, 0x10}, //  1

	{"pi2n_c1.bin",0x800000, 0x50fd785e,    1}, //  2 Sprite data
	{"pi2n_c2.bin",0x800000, 0xab913f1e,    1}, //  3
	{"pi2n_c3.bin",0x800000, 0xbc0ee75c,    1}, //  4
	{"pi2n_c4.bin",0x800000, 0x29908823,    1}, //  5
	{"pi2n_c5.bin",0x800000, 0x83c56bca,    1}, //  6
	{"pi2n_c6.bin",0x800000, 0x59e0e805,    1}, //  7

	{"255-m1.bin", 0x020000, 0x8EFD4014, 0x10}, // 10 Z80 code

	{"255-v1.bin", 0x400000, 0x5A14543D,    2}, // 11 Sound data
	{"255-v2.bin", 0x200000, 0x6610D91A,    2}, // 12
};

STDROMPICKEXT(preisl2n, preisl2n, neogeo);
STD_ROM_FN(preisl2n);

struct BurnDriver BurnDrvpreisl2n = {
	{"preisl2n", "Prehistoric Isle 2", "Non-encrypted P-ROMs, decrypted C-ROMs", "Yumekobo", "Neo Geo", "1999", "preisle2", "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_SRAM,
	NULL, preisl2nRomInfo, preisl2nRomName, neogeoInputInfo, neogeoDIPInfo,
	preisle2Init, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};

// Strikers 1945 plus (Non-encrypted P-ROMs, decrypted C-ROMs)

static struct BurnRomInfo s1945pnRomDesc[] = {
	{"254-p1.bin",	0x100000, 0xFF8EFCFF, 0x10}, //  0 68K code
	{"254-p2.bin",	0x400000, 0xEFDFD4DD, 0x10}, //  1

	{"s45pn_c1.bin",0x800000, 0x7b6902f9,    1}, //  2 Sprite data
	{"s45pn_c2.bin",0x800000, 0x51bd4252,    1}, //  3
	{"s45pn_c3.bin",0x800000, 0xa38993e4,    1}, //  4
	{"s45pn_c4.bin",0x800000, 0xd5696530,    1}, //  5
	{"s45pn_c5.bin",0x800000, 0x28764bd6,    1}, //  6
	{"s45pn_c6.bin",0x800000, 0x9931bdf1,    1}, //  7
	{"s45pn_c7.bin",0x800000, 0x6e12afcd,    1}, //  8
	{"s45pn_c8.bin",0x800000, 0x178d4684,    1}, //  9

	{"254-m1.bin",	0x020000, 0x994B4487, 0x10}, // 10 Z80 code

	{"254-v1.bin",	0x400000, 0x844F58FB,    2}, // 11 Sound data
	{"254-v2.bin",	0x400000, 0xD9A248F0,    2}, // 12
	{"254-v3.bin",	0x400000, 0x0B0D2D33,    2}, // 13
	{"254-v4.bin",	0x400000, 0x6D13DC91,    2}, // 14
};

STDROMPICKEXT(s1945pn, s1945pn, neogeo);
STD_ROM_FN(s1945pn);

struct BurnDriver BurnDrvs1945pn = {
	{"s1945pn", "Strikers 1945 plus", "Non-encrypted P-ROMs, decrypted C-ROMs", "Psikyo", "Neo Geo", "1999", "s1945p", "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_SWAPC,
	NULL, s1945pnRomInfo, s1945pnRomName, neogeoInputInfo, neogeoDIPInfo,
	s1945pInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};


// King of Fighter 2001 'd

static struct BurnRomInfo kof2001RomDesc[] = {
	{"262-p1.bin"   , 0x100000, 0x9381750D, 0x10}, //  0 68K code
	{"262-p2.bin"   , 0x400000, 0x8e0d8329, 0x10}, //  0 68K code

	{"262-c1.bin"   , 0x800000, 0x99cc785a,    1}, //  2 Sprite data
	{"262-c2.bin"   , 0x800000, 0x50368cbf,    1}, //  3
	{"262-c3.bin"   , 0x800000, 0xfb14ff87,    1}, //  4
	{"262-c4.bin"   , 0x800000, 0x4397faf8,    1}, //  5
	{"262-c5.bin"   , 0x800000, 0x91f24be4,    1}, //  6
	{"262-c6.bin"   , 0x800000, 0xa31e4403,    1}, //  7
	{"262-c7.bin"   , 0x800000, 0x54d9d1ec,    1}, //  8
	{"262-c8.bin"   , 0x800000, 0x59289a6b,    1}, //  9

	{"262-m1.bin"   , 0x020000, 0x73C1F5B0, 0x10}, // 10 Z80 code

	{"262-v1.bin"   , 0x400000, 0x83d49ecf,    2}, // 11 Sound data
	{"262-v2.bin"   , 0x400000, 0x003f1843,    2}, // 12
	{"262-v3.bin"   , 0x400000, 0x2ae38dbe,    2}, // 13
	{"262-v4.bin"   , 0x400000, 0x26ec4dd9,    2}, // 14
};

STDROMPICKEXT(kof2001, kof2001, neogeo);
STD_ROM_FN(kof2001);

void __fastcall kof2001WriteWordBankswitch(unsigned int sekAddress, unsigned short wordValue)
{
	if (sekAddress == 0x2FFFEC) {
		static unsigned int bankoffset[64] = {
			0x000000, 0x100000, 0x200000, 0x300000, // 00
			0x3f7800, 0x4f7800, 0x3ff800, 0x4ff800, // 04
			0x407800, 0x507800, 0x40f800, 0x50f800, // 08
			0x416800, 0x516800, 0x41d800, 0x51d800, // 12
			0x424000, 0x524000, 0x523800, 0x623800, // 16
			0x526000, 0x626000, 0x528000, 0x628000, // 20
			0x52a000, 0x62a000, 0x52b800, 0x62b800, // 24
			0x52d000, 0x62d000, 0x52e800, 0x62e800, // 28
			0x618000, 0x619000, 0x61a000, 0x61a800, // 32
		};

		// Unscramble bank number
		int nBank =
			(((wordValue >> 15) & 1) << 0) +
			(((wordValue >> 14) & 1) << 1) +
			(((wordValue >>  7) & 1) << 2) +
			(((wordValue >>  3) & 1) << 3) +
			(((wordValue >> 10) & 1) << 4) +
			(((wordValue >>  5) & 1) << 5);

		if (bankoffset[nBank] != nNeo68KROMBank) {
			nNeo68KROMBank = bankoffset[nBank];
			SekMapMemory(Neo68KROM02 + nNeo68KROMBank,			  0x200000, 0x2FE3FF, SM_ROM);
			SekMapMemory(Neo68KROM02 + nNeo68KROMBank + 0x0FE800, 0x2FE800, 0x2FFBFF, SM_ROM);
		}
	}
}

static int kof2001Init()
{
	nNeoTextROMSize = 0x080000;
	nNeoProtectionXor = 0x1e;

	return NeoInit();
}
struct BurnDriver BurnDrvkof2001 = {
	{"kof2001", "The King Of Fighters '2001", NULL, "SNK", "Neo Geo", "2001", NULL , "neogeo"},
	BDF_GAME_WORKING , 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_ENCRYPTED_B,
	NULL, kof2001RomInfo, kof2001RomName, neogeoInputInfo, neogeoDIPInfo,
	kof2001Init, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};


// kof2k1nd.zip

static struct BurnRomInfo kof2k1ndRomDesc[] = {
	{"262-p1.bin"   , 0x100000, 0x0, 0x10}, //  0 68K code
	{"262-p2.bin"   , 0x400000, 0x0, 0x10}, //  0 68K code

	{"kf2k1_s1.rom"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"kf2k1_c1.rom"   , 0x800000, 0x0,    1}, //  2 Sprite data
	{"kf2k1_c2.rom"   , 0x800000, 0x0,    1}, //  3
	{"kf2k1_c3.rom"   , 0x800000, 0x0,    1}, //  4
	{"kf2k1_c4.rom"   , 0x800000, 0x0,    1}, //  5
	{"kf2k1_c5.rom"   , 0x800000, 0x0,    1}, //  6
	{"kf2k1_c6.rom"   , 0x800000, 0x0,    1}, //  7
	{"kf2k1_c7.rom"   , 0x800000, 0x0,    1}, //  8
	{"kf2k1_c8.rom"   , 0x800000, 0x0,    1}, //  9

	{"262-m1d.bin"   , 0x040000, 0x0, 0x10}, // 10 Z80 code

	{"262-v1.bin"   , 0x400000, 0x0,    2}, // 11 Sound data
	{"262-v2.bin"   , 0x400000, 0x0,    2}, // 12
	{"262-v3.bin"   , 0x400000, 0x0,    2}, // 13
	{"262-v4.bin"   , 0x400000, 0x0,    2}, // 14
};

STDROMPICKEXT(kof2k1nd, kof2k1nd, neogeo);
STD_ROM_FN(kof2k1nd);

struct BurnDriver BurnDrvkof2k1nd = {
	{"kof2k1nd", "The King of Fighters '2001", "Full", "SNK", "Neo Geo", "2001", "kof2001" , "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO,
	NULL, kof2k1ndRomInfo, kof2k1ndRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};
// cthd2k3.zip

static struct BurnRomInfo cthd2k3RomDesc[] = {
	{"5003-p1.bin"   , 0x100000, 0x0, 0x10}, //  0 68K code
	{"5003-p2.bin"   , 0x400000, 0x0, 0x10}, //  0 68K code

	{"5003-s1.bin"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"5003-c1.bin"   , 0x800000, 0x0,    1}, //  2 Sprite data
	{"5003-c2.bin"   , 0x800000, 0x0,    1}, //  3
	{"5003-c3.bin"   , 0x800000, 0x0,    1}, //  4
	{"5003-c4.bin"   , 0x800000, 0x0,    1}, //  5
	{"5003-c5.bin"   , 0x800000, 0x0,    1}, //  6
	{"5003-c6.bin"   , 0x800000, 0x0,    1}, //  7
	{"5003-c7.bin"   , 0x800000, 0x0,    1}, //  8
	{"5003-c8.bin"   , 0x800000, 0x0,    1}, //  9

	{"5003-m1.bin"   , 0x020000, 0x0, 0x10}, // 10 Z80 code

	{"262-v1.bin"   , 0x400000, 0x0,    2}, // 11 Sound data
	{"262-v2.bin"   , 0x400000, 0x0,    2}, // 12
	{"262-v3.bin"   , 0x400000, 0x0,    2}, // 13
	{"262-v4.bin"   , 0x400000, 0x0,    2}, // 14
};

STDROMPICKEXT(cthd2k3, cthd2k3, neogeo);
STD_ROM_FN(cthd2k3);

struct BurnDriver BurnDrvcthd2k3 = {
	{"cthd2k3", "Crouching Tiger Hidden Dragon 2003", NULL, "SNK", "Neo Geo", "2001", "cthd2003", "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_SRAM ,NULL, cthd2k3RomInfo, cthd2k3RomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};



// kof99nd.zip

static struct BurnRomInfo kof99ndRomDesc[] = {
	{"kf99n_p1.rom"   , 0x100000, 0x0, 0x10}, //  0 68K code
	{"kf99n_p2.rom"   , 0x400000, 0x0, 0x10}, //  0 68K code

	{"kf99n_s1.rom"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"kf99n_c1.rom"   , 0x800000, 0x0,    1}, //  2 Sprite data
	{"kf99n_c2.rom"   , 0x800000, 0x0,    1}, //  3
	{"kf99n_c3.rom"   , 0x800000, 0x0,    1}, //  4
	{"kf99n_c4.rom"   , 0x800000, 0x0,    1}, //  5
	{"kf99n_c5.rom"   , 0x800000, 0x0,    1}, //  6
	{"kf99n_c6.rom"   , 0x800000, 0x0,    1}, //  7
	{"kf99n_c7.rom"   , 0x800000, 0x0,    1}, //  8
	{"kf99n_c8.rom"   , 0x800000, 0x0,    1}, //  9

	{"251-m1.bin"   , 0x020000, 0x0, 0x10}, // 10 Z80 code

	{"251-v1.bin"   , 0x400000, 0x0,    2}, // 11 Sound data
	{"251-v2.bin"   , 0x400000, 0x0,    2}, // 12
	{"251-v3.bin"   , 0x400000, 0x0,    2}, // 13
	{"251-v4.bin"   , 0x200000, 0x0,    2}, // 14
};

STDROMPICKEXT(kof99nd, kof99nd, neogeo);
STD_ROM_FN(kof99nd);

struct BurnDriver BurnDrvkof99nd = {
	{"kof99nd", "The King of Fighters '99", "Full", "SNK", "Neo Geo", "1999","kof99", "neogeo"},
	BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO,
	NULL, kof99ndRomInfo, kof99ndRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};

// kof2knd

static struct BurnRomInfo kof2kndRomDesc[] = {
	{"257-p1n.bin"   , 0x100000, 0x0, 0x10}, //  0 68K code
	{"257-p2n.bin"   , 0x400000, 0x0, 0x10}, //  0 68K code

	{"kof2k_s1.rom"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"kof2k_c1.rom"   , 0x800000, 0x0,    1}, //  2 Sprite data
	{"kof2k_c2.rom"   , 0x800000, 0x0,    1}, //  3
	{"kof2k_c3.rom"   , 0x800000, 0x0,    1}, //  4
	{"kof2k_c4.rom"   , 0x800000, 0x0,    1}, //  5
	{"kof2k_c5.rom"   , 0x800000, 0x0,    1}, //  6
	{"kof2k_c6.rom"   , 0x800000, 0x0,    1}, //  7
	{"kof2k_c7.rom"   , 0x800000, 0x0,    1}, //  8
	{"kof2k_c8.rom"   , 0x800000, 0x0,    1}, //  9

	{"257-m1d.bin"   , 0x040000, 0x0, 0x10}, // 10 Z80 code

	{"257-v1.bin"   , 0x400000, 0x0,    2}, // 11 Sound data
	{"257-v2.bin"   , 0x400000, 0x0,    2}, // 12
	{"257-v3.bin"   , 0x400000, 0x0,    2}, // 13
	{"257-v4.bin"   , 0x400000, 0x0,    2}, // 14
};

STDROMPICKEXT(kof2knd, kof2knd, neogeo);
STD_ROM_FN(kof2knd);

struct BurnDriver BurnDrvkof2knd = {
	{"kof2knd", "The King of Fighters 2000", "Full", "SNK", "Neo Geo", "2000", "kof2000", "neogeo"},
	BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO ,
	NULL, kof2kndRomInfo, kof2kndRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};

// mslug3nd.zip

static struct BurnRomInfo mslug3ndRomDesc[] = {
	{"256-ph1.bin"   , 0x100000, 0x0, 0x10}, //  0 68K code
	{"256-ph2.bin"   , 0x400000, 0x0, 0x10}, //  0 68K code

	{"ms3n_s1.rom"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"ms3n_c1.rom"   , 0x800000, 0x0,    1}, //  2 Sprite data
	{"ms3n_c2.rom"   , 0x800000, 0x0,    1}, //  3
	{"ms3n_c3.rom"   , 0x800000, 0x0,    1}, //  4
	{"ms3n_c4.rom"   , 0x800000, 0x0,    1}, //  5
	{"ms3n_c5.rom"   , 0x800000, 0x0,    1}, //  6
	{"ms3n_c6.rom"   , 0x800000, 0x0,    1}, //  7
	{"ms3n_c7.rom"   , 0x800000, 0x0,    1}, //  8
	{"ms3n_c8.rom"   , 0x800000, 0x0,    1}, //  9

	{"256-m1.bin"   , 0x080000, 0x0, 0x10}, // 10 Z80 code

	{"256-v1.bin"   , 0x400000, 0x0,    2}, // 11 Sound data
	{"256-v2.bin"   , 0x400000, 0x0,    2}, // 12
	{"256-v3.bin"   , 0x400000, 0x0,    2}, // 13
	{"256-v4.bin"   , 0x400000, 0x0,    2}, // 14
};

STDROMPICKEXT(mslug3nd, mslug3nd, neogeo);
STD_ROM_FN(mslug3nd);

struct BurnDriver BurnDrvmslug3nd = {
	{"mslug3nd", "Metal Slug 3", "Full", "SNK", "Neo Geo", "1999", "mslug3", "neogeo"},
	BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO,
	NULL, mslug3ndRomInfo, mslug3ndRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};


//	Sngoku3n.zip


static struct BurnRomInfo sengoku3nRomDesc[] = {
	{"sen3_p1.rom", 0x200000, 0xd449954e, 0x10}, //  0 68K code

	{"sen3_s1.rom", 0x020000, 0x0,    1}, //  1 Text data

	{"sen3_c1.rom", 0x800000, 0x0,    1}, //  2 Sprite data
	{"sen3_c2.rom", 0x800000, 0x0,    1}, //  3
	{"sen3_c3.rom", 0x800000, 0x0,    1}, //  5
	{"sen3_c4.rom", 0x800000, 0x0,    1}, //  6

	{"Sen3_m1.rom", 0x020000, 0x0, 0x10}, // 11 Z80 code

	{"261-v1.bin", 0x400000, 0x0,    2}, //  12 Sound data
	{"261-v2.bin", 0x400000, 0x0,    2}, //  13
	{"261-v3.bin", 0x400000, 0x0,    2}, //  14
	{"261-v4.bin", 0x200000, 0x0,    2}, //  15
}; 

STDROMPICKEXT(sengoku3n, sengoku3n, neogeo); 
STD_ROM_FN(sengoku3n);


struct BurnDriver BurnDrvsengoku3n = {

	{"sngoku3n", "Sengoku 3", "None", "SNK", "Neo Geo", "2001", "sengoku3" , "neogeo"},
	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SNK_NEOGEO |HARDWARE_SNK_SWAPP ,
	NULL, sengoku3nRomInfo, sengoku3nRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};

// sengoku3.zip

static struct BurnRomInfo sengoku3RomDesc[] = { 
{"261-p1.bin", 0x200000, 0xd449954e, 0x10}, // 0 68K code 

{"261-c1.bin", 0x800000, 0xded84d9c, 1}, // 1 Sprite data 
{"261-c2.bin", 0x800000, 0xb8eb4348, 1}, // 2 
{"261-c3.bin", 0x800000, 0x84e2034a, 1}, // 3 
{"261-c4.bin", 0x800000, 0x0b45ae53, 1}, // 4 

{"261-m1.bin", 0x020000, 0x36ed9cdd, 0x10}, // 3 Z80 code 

{"261-v1.bin", 0x400000, 0x64c30081, 2}, // 1 Sound data 
{"261-v2.bin", 0x400000, 0x392a9c47, 2}, // 2 Sound data 
{"261-v3.bin", 0x400000, 0xc1a7ebe3, 2}, // 3 Sound data 
{"261-v4.bin", 0x200000, 0x9000d085, 2}, // 4 Sound data 
}; 

STDROMPICKEXT(sengoku3, sengoku3, neogeo); 
STD_ROM_FN(sengoku3); 

static int sengoku3Init() 
{ 
nNeoProtectionXor = 0xfe; 
return NeoInit(); 
} 

struct BurnDriver BurnDrvsengoku3 = { 
{"sengoku3", "Sengoku 3", NULL, "SNK", "Neo Geo", "2001", NULL, "neogeo"}, 
BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO | HARDWARE_SNK_SWAPP | HARDWARE_SNK_ENCRYPTED_A | HARDWARE_SNK_SRAM  , 
NULL, sengoku3RomInfo, sengoku3RomName, neogeoInputInfo, neogeoDIPInfo, 
sengoku3Init, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette, 
nNeoScreenWidth, 224, 4, 3 
};

// zintrick

static struct BurnRomInfo zintrickRomDesc[] = {
	{"zin_p1.rom"   , 0x100000, 0x0, 0x10}, //  0 68K code

	{"zin_s1.rom"   , 0x020000, 0x0,    1}, //  1 Text layer tiles

	{"zin_c1.rom"   , 0x200000, 0x0,    1}, //  2 Sprite data
	{"zin_c2.rom"   , 0x200000, 0x0,    1}, //  3

	{"zin_m1.rom"   , 0x020000, 0x0, 0x10}, // 10 Z80 code

	{"zin_v1.rom"   , 0x200000, 0x0,    2}, // 11 Sound data

};

STDROMPICKEXT(zintrick, zintrick, neogeo);
STD_ROM_FN(zintrick);

struct BurnDriver BurnDrvzintrick = {
	{"zintrick", "Zintrick", "Full", "SNK", "Neo Geo", "neocd", NULL, "neogeo"},
	BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO,
	NULL, zintrickRomInfo, zintrickRomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};



// cthd2003

//====================================
static struct BurnRomInfo cthd2003RomDesc[] = {
	{"5003-p1.bin", 0x100000, 0x0, 0x10}, //  0 68K code
	{"5003-p2.bin", 0x400000, 0x0, 0x10}, //  1

	{"5003-s1.bin", 0x020000, 0x0,    1}, //  2 Text layer tiles

	{"5003-c1.bin", 0x800000, 0x0,    1}, //  3 Sprite data
	{"5003-c2.bin", 0x800000, 0x0,    1}, //  4
	{"5003-c3.bin", 0x800000, 0x0,    1}, //  5
	{"5003-c4.bin", 0x800000, 0x0,    1}, //  6
	{"5003-c5.bin", 0x800000, 0x0,    1}, //  7
	{"5003-c6.bin", 0x800000, 0x0,    1}, //  8
	{"5003-c7.bin", 0x800000, 0x0,    1}, //  9
	{"5003-c8.bin", 0x800000, 0x0,    1}, // 10

	{"5003-m1.bin", 0x020000, 0x0, 0x10}, // 11 Z80 code

	{"262-v1.bin", 0x400000, 0x0,    2}, // 10	Sound data
	{"262-v2.bin", 0x400000, 0x0,    2}, // 11
	{"262-v3.bin", 0x400000, 0x0,    2}, // 12
	{"262-v4.bin", 0x400000, 0x0,    2}, // 12
};

STDROMPICKEXT(cthd2003, cthd2003, neogeo);
STD_ROM_FN(cthd2003);

struct BurnDriver BurnDrvcthd2003 = {
	{"cthd2003", "Crouching Tiger Hidden Dragon 2003", NULL , "SNK", "Neo Geo", "2001", NULL , "neogeo"},
	BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO |HARDWARE_SNK_SWAPP,NULL, cthd2003RomInfo, cthd2003RomName, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	nNeoScreenWidth, 224, 4, 3
};
//=====================
//====================================



// GhostLop

static struct BurnRomInfo ghostlopRomDesc[] = {
{"228-p1.bin", 0x100000, 0x6033172e, 0x10}, // 0 68K code

{"228-s1.bin", 0x020000, 0x83c24e81, 1}, // 1 Text data

{"228-c1.bin", 0x400000, 0xbfc99efe, 1}, // 2 Sprite data
{"228-c2.bin", 0x400000, 0x69788082, 1}, // 3

{"228-m1.bin", 0x020000, 0xfd833b33, 0x10}, // 4 Z80 code

{"228-v1.bin", 0x200000, 0xc603fce6, 2}, // 5 Sound data
}; 

STDROMPICKEXT(ghostlop, ghostlop, neogeo); 
STD_ROM_FN(ghostlop);

struct BurnDriver BurnDrvghostlop = {

{"ghostlop", "GhostLop", NULL, "Data East Corporation ", "Neo Geo", "1996", NULL, "neogeo"},
BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_SNK_NEOGEO,
NULL, ghostlopRomInfo, ghostlopRomName, neogeoInputInfo, neogeoDIPInfo,
NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
nNeoScreenWidth, 224, 4, 3
}; 

